package com.atguigu.guli.service.edu.controller.admin;


import com.atguigu.guli.service.base.result.R;
import com.atguigu.guli.service.edu.entity.Teacher;
import com.atguigu.guli.service.edu.entity.query.TeacherQuery;
import com.atguigu.guli.service.edu.service.TeacherService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * postman:功能模块测试
 * swagger2/3:功能模块测试
 *      1.引入swagger依赖
 *      2.创建swagger配置类,启用swagger
 *          >swagger注解:
 *              2.1对controller进行分组的注解或者配置
 *                  接口分为两种,一种为管理员访问,一种是会员访问
 *                  后台管理: 路径中包含/admin
 *                  用户系统: 路径中包含/api
 *              2.2对controller和它的接口进行描述的注解
 *                 @Api:描述接口类
 *                  @ApiOpration:描述接口中的一个方法
 *              2.3对接口返回值对象进行描述的注解
 *                  @ApiModel: 描述javabean
 *                  @ApiModelProperty: 描述javabean的一个属性
 *      3.项目运行时,可以通过路径:http://ip:端口号/swagger-ui.html
 * jmeter:并发性能测压
 */
@RestController
@RequestMapping("/admin/edu/teacher")
@Api(tags = "讲师管理模块")
public class AdminTeacherController {

    @Autowired
    TeacherService teacherService;

    /*
        统一响应类:
            状态码:Integer code
            状态描述:String msg
            是否成功:boolean success
            成功的响应数据:Map<k,v> data
        javabean的类型:
            1.entitry:数据库对应的bean
            2.Form/Query:前端页面表单收集提交的数据对应的bean
            3.VO: view Object 浏览器需要显示的数据对应的bean
            4.DTO: data transfer object 微服务之间远程访问时需要公用的类
            业务bean:Page类
     */
    //查询所有
    @ApiOperation(value = "查询所有讲师")
    @GetMapping("/list")
    public R listAll(){
        //代码正常执行 会返回数据的结果集,如果出现异常一般trycatch 返回异常信息给浏览器(这两种响应状态都是200)
        List<Teacher> teachers= teacherService.list();
        return R.ok().data("items",teachers);
    }

    //删除指定id讲师
    @ApiOperation(value = "删除讲师")
    @DeleteMapping("remove/{id}")
    public R deleteTeacher(@ApiParam(value = "讲师id") @PathVariable String id){
        boolean b = teacherService.removeById(id);
        if (b){
            return R.ok();
        }
        return R.error().message("记录不存在");
    }

    //查询讲师的分页数据
//    @ApiOperation(value = "讲师分页")
//    @GetMapping("list/{pageNum}/{pageSize}")
//    public R listPage(@PathVariable Integer pageNum,@PathVariable Integer pageSize){
//        Page<Teacher> page= new Page<>(pageNum,pageSize);
//        teacherService.page(page);
//        return R.ok().data("page",page);
//    }

    //条件分页查询
    //get方式的请求报文默认没有请求体,其他方式才有
    @ApiOperation(value = "讲师分页")
    @GetMapping("list/{pageNum}/{pageSize}")
    public R listPageByCondition(@PathVariable Integer pageNum,
                                 @PathVariable Integer pageSize,
                                 TeacherQuery teacherQuery){
        Page<Teacher> page=teacherService.listPage(pageNum,pageSize,teacherQuery);
        return R.ok().data("page",page);
    }

    //新增讲师
    @ApiOperation(value = "新增讲师")
    @PostMapping("save")
    public R saveTeacher(@RequestBody Teacher teacher){
        Boolean flag=teacherService.saveTeacher(teacher);
        if (flag){
            return R.ok();
        }
        return R.error().message("讲师已存在");
    }

    //根据id查询讲师
    @ApiOperation(value = "根据id查询讲师")
    @GetMapping("get/{id}")
    public R getById(@PathVariable String id){
        Teacher teacher= teacherService.getById(id);
        return R.ok().data("item",teacher);
    }

    //更新讲师
    @ApiOperation(value = "更新讲师")
    @PutMapping("update")
    public R updateTeacher(@RequestBody Teacher teacher){
        boolean b=teacherService.updateById(teacher);
        if (b){
            return R.ok();
        }
        return R.error().message("更新失败");
    }
}

